home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1995 February: Tool Chest / Dev.CD Feb 95 / Dev.CD Feb 95.toast / Tool Chest / Development Tools & Languages / • Other Platforms / PCCTS / support / set / set.h < prev   
Encoding:
C/C++ Source or Header  |  1994-09-14  |  3.0 KB  |  115 lines  |  [TEXT/MPS ]

  1. /*    set.h
  2.  
  3.     The following is a general-purpose set library originally developed
  4.     by Hank Dietz and enhanced by Terence Parr to allow dynamic sets.
  5.     
  6.     Sets are now structs containing the #words in the set and
  7.     a pointer to the actual set words.
  8.  
  9.     1987 by Hank Dietz
  10.     
  11.     Modified by:
  12.         Terence Parr
  13.         Purdue University
  14.         October 1989
  15.  
  16.         Added ANSI prototyping Dec. 1992 -- TJP
  17. */
  18.  
  19. #include "config.h"
  20.  
  21. #ifdef NOT_USED /* SEE config.h */ 
  22. /* Define usable bits per unsigned int word */
  23. #ifdef PC
  24. #define WORDSIZE 16
  25. #define LogWordSize    4
  26. #else
  27. #define    WORDSIZE 32
  28. #define LogWordSize 5
  29. #endif
  30. #define BytesPerWord    sizeof(unsigned)
  31. #endif
  32.  
  33. #define    SETSIZE(a) ((a).n<<LogWordSize)        /* Maximum items per set */
  34. #define    MODWORD(x) ((x) & (WORDSIZE-1))        /* x % WORDSIZE */
  35. #define    DIVWORD(x) ((x) >> LogWordSize)        /* x / WORDSIZE */
  36. #define    nil    ((unsigned) -1)        /* An impossible set member all bits on (big!) */
  37.  
  38. typedef struct _set {
  39.             unsigned int n;        /* Number of words in set */
  40.             unsigned *setword;
  41.         } set;
  42.  
  43. #define set_init    {0, NULL}
  44. #define set_null(a)    ((a).setword==NULL)
  45.  
  46. #define    NumBytes(x)        (((x)>>3)+1)                        /* Num bytes to hold x */
  47. #define    NumWords(x)        ((((unsigned)(x))>>LogWordSize)+1)    /* Num words to hold x */
  48.  
  49.  
  50. /* M a c r o s */
  51.  
  52. /* make arg1 a set big enough to hold max elem # of arg2 */
  53. #define set_new(a,_max) \
  54. if (((a).setword=(unsigned *)calloc(NumWords(_max),BytesPerWord))==NULL) \
  55.         fprintf(stderr, "set_new: Cannot allocate set with max of %d\n", _max); \
  56.         (a).n = NumWords(_max);
  57.  
  58. #define set_free(a)                                    \
  59.     {if ( (a).setword != NULL ) free((char *)((a).setword));    \
  60.     (a) = empty;}
  61.  
  62. #ifdef __STDC__
  63. extern void set_size( unsigned );
  64. extern unsigned int set_deg( set );
  65. extern set set_or( set, set );
  66. extern set set_and( set, set );
  67. extern set set_dif( set, set );
  68. extern set set_of( unsigned );
  69. extern void set_ext( set *, unsigned int );
  70. extern set set_not( set );
  71. extern int set_equ( set, set );
  72. extern int set_sub( set, set );
  73. extern unsigned set_int( set );
  74. extern int set_el( unsigned, set );
  75. extern int set_nil( set );
  76. extern char * set_str( set );
  77. extern set set_val( register char * );
  78. extern void set_orel( unsigned, set * );
  79. extern void set_orin( set *, set );
  80. extern void set_rm( unsigned, set );
  81. extern void set_clr( set );
  82. extern set set_dup( set );
  83. extern void set_PDQ( set, register unsigned * );
  84. extern unsigned *set_pdq( set );
  85. extern void _set_pdq( set a, register unsigned *q );
  86. extern unsigned int set_hash( set, register unsigned int );
  87. #else
  88. extern void set_size();
  89. extern unsigned int set_deg();
  90. extern set set_or();
  91. extern set set_and();
  92. extern set set_dif();
  93. extern set set_of();
  94. extern void set_ext();
  95. extern set set_not();
  96. extern int set_equ();
  97. extern int set_sub();
  98. extern unsigned set_int();
  99. extern int set_el();
  100. extern int set_nil();
  101. extern char * set_str();
  102. extern set set_val();
  103. extern void set_orel();
  104. extern void set_orin();
  105. extern void set_rm();
  106. extern void set_clr();
  107. extern set set_dup();
  108. extern void set_PDQ();
  109. extern unsigned *set_pdq();
  110. extern void _set_pdq();
  111. extern unsigned int set_hash();
  112. #endif
  113.  
  114. extern set empty;
  115.